package DAO;

import Entidades.Cliente;
import Entidades.Imagenes;
import Entidades.Nif;
import Entidades.Usuarios;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class ClienteDAO {

   
//holaaaa
//adios
    PreparedStatement pstmt;
    Statement stmt;
    ResultSet rs;
    ArrayList list = new ArrayList();

    public Cliente consultarPorDni(Connection conexion, Cliente cliente) throws SQLException {

        pstmt = conexion.prepareStatement("SELECT * FROM Clientes WHERE clientes.dni=?");
        pstmt.setString(1, cliente.getDni());
        rs = pstmt.executeQuery();

        if (rs.next()) {
            cliente = new Cliente();
            cliente.setDni(rs.getString(1));
            cliente.setNombre(rs.getString(2));
            cliente.setVisitas(rs.getString(7));
        }

        return cliente;

    }
    
    public Cliente consultarPorNombre(Connection conexion, Cliente cliente) throws SQLException {

        pstmt = conexion.prepareStatement("SELECT * FROM Clientes WHERE clientes.nombre=?");
        pstmt.setString(1, cliente.getNombre());
        rs = pstmt.executeQuery();

        if (rs.next()) {
            cliente = new Cliente();
            cliente.setDni(rs.getString(1));
            cliente.setNombre(rs.getString(2));
        }

        return cliente;

    }

    public void insertar(Cliente cliente, Connection conexion) throws Exception {

        pstmt = conexion.prepareStatement("INSERT INTO CLIENTES VALUES(?,?,?,?,?,?,NULL)");
        pstmt.setString(1, cliente.getDni());
        pstmt.setString(2, cliente.getNombre());
        pstmt.setString(3, cliente.getApellidos());
        pstmt.setString(4, cliente.getFecha());
        pstmt.setInt(5, cliente.getSaldo());
        pstmt.setString(6, cliente.getCuenta());

        pstmt.executeUpdate();

    }

    public void insertarImagenes(Connection conexion, int dni, Imagenes imagenes) throws Exception {

        pstmt = conexion.prepareStatement("INSERT INTO IMAGENES VALUES(?,?)");
        pstmt.setString(1, imagenes.getDni() + "-" + Nif.calcularLetra(dni));
        pstmt.setString(2, imagenes.getFoto());

        pstmt.executeUpdate();

    }

    public ArrayList select(Connection conexion, Cliente cliente) throws Exception {

        list.clear();
        stmt = conexion.createStatement();
        rs = stmt.executeQuery("Select * from Clientes");

        while (rs.next()) {
            cliente = new Cliente();
            cliente.setDni(rs.getString(1));
            cliente.setNombre(rs.getString(2));
            cliente.setApellidos(rs.getString(3));
            cliente.setFecha(rs.getString(4));
            cliente.setSaldo(rs.getInt(5));
            cliente.setCuenta(rs.getString(6));
            list.add(cliente);
        }

        return list;

    }

    public ArrayList consultaconfoto(Connection conexion, Cliente cliente) throws Exception {

        list.clear();
        stmt = conexion.createStatement();
        rs = stmt.executeQuery("Select foto, clientes.dni, nombre, apellidos, fecha, precio, cuenta  from Clientes, imagenes where clientes.dni = imagenes.dni");

        while (rs.next()) {
            cliente = new Cliente();
            cliente.setFoto(rs.getString(1));
            cliente.setDni(rs.getString(2));
            cliente.setNombre(rs.getString(3));
            cliente.setApellidos(rs.getString(4));
            cliente.setFecha(rs.getString(5));
            cliente.setSaldo(rs.getInt(6));
            cliente.setCuenta(rs.getString(7));
            list.add(cliente);
        }

        return list;

    }

    public void borrar(Cliente cliente, Connection conexion) throws Exception {

        pstmt = conexion.prepareStatement("Delete from clientes where dni = ?");
        pstmt.setString(1, cliente.getDni());

        pstmt.executeUpdate();

    }

    public void actualizar(Cliente cliente, Connection conexion) throws Exception {

        pstmt = conexion.prepareStatement("UPDATE CLIENTES SET NOMBRE = ?,APELLIDOS = ?  Where Nombre = ?");
        pstmt.setString(1, cliente.getNombre());
        pstmt.setString(2, cliente.getApellidos());
        pstmt.setString(3, cliente.getNombre2());

        pstmt.executeUpdate();

    }

    public void contadorVisitas(Connection conexion, Cliente cliente) throws SQLException {

        pstmt = conexion.prepareStatement("update clientes set visitas = visitas + 1 where dni = ?");
        pstmt.setString(1, cliente.getDni());
        
        pstmt.executeUpdate();

    }
}
